package com.master.common.baseService.message;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * @author Heath.Que
 * @version 1.0
 * @classname DirectRabbitConfig
 * @description TODO
 * @Date 2021/6/4 13:56
 **/
@Configuration
public class DirectRabbitConfig {

    /**
     * ############## 短信验证码消息队列 ############
     */
    @Bean
    public Queue SmsCodeQueue(){
        //durable: 是否持久化，默认是false，持久化队列会被存储在磁盘上，当消息代理重启是任然存在。暂存队列支队当前链接有效
        // exclusive: 默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
        // autoDelete: 是否自动删除，当没有生产者和消费者使用吃队列时，该队列会自动删除

        //一般设置队列的持久化、其余的默认false
        return new Queue("SmsCodeQueue", true);
    }

    @Bean
    DirectExchange SmsCodeExchange(){
        return new DirectExchange("SmsCodeExchange", true, true);
    }

    @Bean
    Binding SmsCodeBindingDirect(){
        return BindingBuilder.bind(SmsCodeQueue()).to(SmsCodeExchange()).with("SmsCodeRouting");
    }



    /**
     * ############## 收费通知消息队列 ############
     */
    @Bean
    public Queue ChargeMessageQueue(){
        //durable: 是否持久化，默认是false，持久化队列会被存储在磁盘上，当消息代理重启是任然存在。暂存队列支队当前链接有效
        // exclusive: 默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
        // autoDelete: 是否自动删除，当没有生产者和消费者使用吃队列时，该队列会自动删除

        //一般设置队列的持久化、其余的默认false
        return new Queue("ChargeMessageQueue", true);
    }

    @Bean
    DirectExchange ChargeMessageExchange(){
        return new DirectExchange("ChargeMessageExchange", true, true);
    }

    @Bean
    Binding ChargeMessageBindingDirect(){
        return BindingBuilder.bind(ChargeMessageQueue()).to(ChargeMessageExchange()).with("ChargeMessageRouting");
    }




    /**
     * ############## 维修通知消息队列 ############
     */
    @Bean
    public Queue RepairMessageQueue(){
        //durable: 是否持久化，默认是false，持久化队列会被存储在磁盘上，当消息代理重启是任然存在。暂存队列支队当前链接有效
        // exclusive: 默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
        // autoDelete: 是否自动删除，当没有生产者和消费者使用吃队列时，该队列会自动删除

        //一般设置队列的持久化、其余的默认false
        return new Queue("RepairMessageQueue", true);
    }

    @Bean
    DirectExchange RepairMessageExchange(){
        return new DirectExchange("RepairMessageExchange", true, true);
    }

    @Bean
    Binding RepairMessageBindingDirect(){
        return BindingBuilder.bind(ChargeMessageQueue()).to(ChargeMessageExchange()).with("RepairMessageRouting");
    }





    @Bean
    DirectExchange lonelyDirectExchange(){
        return new DirectExchange("lonelyDirectExchange");
    }

}
